跳到主要内容

8 字符串转换整数

https://leetcode.cn/leetbook/read/top-interview-questions-easy/xnoilh/

https://leetcode.cn/problems/string-to-integer-atoi/description/

cost: 23m53s

class Solution {
public:
int myAtoi(string s) {
int r = 0;
bool isPositive = true;
int state = 0; // 0: init, 1: skipping space, 2: parsing +-, 3: skipping
// zeros, 4: parsing num
for (int i = 0; i < s.size();) {
char ch = s[i];
if (ch == ' ' && (state == 0 || state == 1)) {
state = 1;
i++;
continue;
}
if (ch == '+' && (state == 0 || state == 1)) {
state = 2;
i++;
continue;
}
if (ch == '-' && (state == 0 || state == 1)) {
state = 2;
isPositive = false;
i++;
continue;
}
if (ch == '0' && (state <= 3)) {
state = 3;
i++;
continue;
}
if (std::isdigit(ch) && (state <= 4)) {
state = 4;
if (0x7FFFFFFF / 10 < r) {
return isPositive ? 0x7FFFFFFF : -0x7FFFFFFF - 1;
}
r *= 10;
if (0x7FFFFFFF - r < ch - '0') {
return isPositive ? 0x7FFFFFFF : -0x7FFFFFFF - 1;
}
r += ch - '0';
i++;
continue;
}
break;
}
return isPositive ? r : -r;
}
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)